// 创建一个名为ajax的函数，接受两个参数：config和callback
const request = function (config, callback) {
  // 创建一个新的XMLHttpRequest对象
  var xhr = new XMLHttpRequest();

  // 配置请求类型，默认为GET
  var method = config.method || 'GET';

  // 配置请求的URL
  var url = config.url;

  // 配置请求头，如果是POST请求，需要设置Content-Type
  var headers = config.headers || {};
  if (method === 'POST' && !headers['Content-Type']) {
    headers['Content-Type'] = 'application/x-www-form-urlencoded';
  }

  // 配置请求的超时时间，默认为0（无超时）
  var timeout = config.timeout || 0;

  // 配置请求的参数，如果是GET请求，将参数附加到URL上
  var params = config.params || {};
  if (method === 'GET' && Object.keys(params).length > 0) {
    url += '?' + Object.keys(params).map(function (key) {
      return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
    }).join('&');
  }

  // 初始化请求
  xhr.open(method, url, true);

  // 设置请求头
  Object.keys(headers).forEach(function (key) {
    xhr.setRequestHeader(key, headers[key]);
  });

  // 设置超时
  xhr.timeout = timeout;

  // 设置响应类型为JSON
  xhr.responseType = 'json';

  // 定义请求完成的处理函数
  xhr.onload = function () {
    if (xhr.status >= 200 && xhr.status < 300) {
      // 请求成功，调用回调函数，并传入响应数据
      callback(null, xhr.response);
    } else {
      // 请求失败，调用回调函数，并传入错误信息
      callback(new Error(xhr.statusText), null);
    }
  };

  // 定义请求失败的处理函数
  xhr.onerror = function () {
    callback(new Error('Network error'), null);
  };

  // 定义请求超时的处理函数
  xhr.ontimeout = function () {
    callback(new Error('Request timed out'), null);
  };

  // 发送请求，如果是POST请求，需要传入参数
  xhr.send(method === 'POST' ? params : null);
}


window.request = request